/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.myapp.struts.Institucion;

import BD.BaseDatos;
import com.myapp.struts.Carrera.ConsultarCarreraForm;
import java.util.LinkedList;
import java.sql.*;
import javax.servlet.http.*;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
 *
 * @author Andreina Wilhelm
 */
public class SeleccionarInstitucionesAction extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private static final String SUCCESS = "success";
    private static final String FAILURE = "failure";

    /**
     * This is the action called from the Struts framework.
     *
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        // crea instancia de BD
        BaseDatos bd = new BaseDatos();

        try {
            // establece conexion con BD
            bd.establecerConexion();

            // se crea el query
            String query = "SELECT id, nombre, sede FROM institucion WHERE activo='true' ORDER BY nombre";

            // se ejecuta query
            ResultSet rs = bd.ejecutarQuery(query);

            // se crea lista
            LinkedList<Institucion> instList = new LinkedList<Institucion>();

            while (rs.next()) {
                Institucion inst = new Institucion();
                inst.setId(Integer.parseInt(rs.getString("id")));
                inst.setNombre(rs.getString("nombre"));
                inst.setSede(rs.getString("sede"));
                instList.add(inst);
            }

            // Se agrega la lista al form 
            SeleccionarInstitucionesForm sif = (SeleccionarInstitucionesForm) form;
            sif.setInstitucionesList(instList);

          
            HttpSession sesion = request.getSession();
            String header = request.getHeader("Referer");
            // Chequeo que el jsp anterior sea distinto de agregar, modificar o seleccionar nombre de instituciones. Sino viene ni de agregar ni de modificar ni de seleccionar nombres de insituciones quiere decir que entonces no hay institucion seleccionada
            if (!header.contains("modificarInstitucion.jsp") && !header.contains("modificarInstitucion.do") && !header.contains("agregarInstitucion.jsp") && !header.contains("agregarInstitucion.do") && !header.contains("selectNomInstituciones.do")) {

                ConsultarInstitucionForm cif = (ConsultarInstitucionForm) sesion.getAttribute("ConsultarInstitucionForm");
                if (cif != null) {
                    // Se colocar la institucion seleccionada igual a null xq ahora seleccionare una nueva
                    cif.setInstitucionSelected(null);
                    sesion.setAttribute("ConsultarInstitucionForm", cif);

                    // Si institucion seleccionada es null entonces tambn lo es carrera seleccionada
                    ConsultarCarreraForm ccf = (ConsultarCarreraForm) sesion.getAttribute("ConsultarCarreraForm");
                    if (ccf != null) {
                        ccf.setCarreraSelected(null);
                        sesion.setAttribute("ConsultarCarreraForm", ccf);
                    }
                }
            } else {
                // Si viene de agregar o modificar o seleccionar nombre de instituciones tengo q poner null la carrera selecionada ya que la institucion ha cambiado
                ConsultarCarreraForm ccf = (ConsultarCarreraForm) sesion.getAttribute("ConsultarCarreraForm");
                if (ccf != null) {
                    ccf.setCarreraSelected(null);
                    sesion.setAttribute("ConsultarCarreraForm", ccf);
                }
            }

            // Se termina conexion con BD
            bd.terminarConexion();

            return mapping.findForward(SUCCESS);

        } catch (Exception e) {
            System.out.println("ERROR: Problema al consultar la BD");
        }

        // Se termina conexion con BD
        bd.terminarConexion();
            
        return mapping.findForward(FAILURE);
    }
}
